package com.demo.web;

import com.demo.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/user")
public class UserController {

    /**
     * 在SpringMVC中，若方法需要接收参数，直接在方法上定义变量即可
     * 需要使用@RequestParam注解来标注具体接收的参数，参数名称必须与请求参数名称一致
     *  @RequestParam 注解是标注客户端给服务端提交的参数的
     *    name或value配置提交的参数的名称
     *    required 配置参数是否必须提交，默认为true，客户端必须提交参数
     *    defaultValue 默认值，若客户端没有提交该参数，则使用默认值
     *    如果设置的默认值，又设置required = true ，这时required = true 失效
     */
    @RequestMapping("/login")
    public String login(
            @RequestParam(name="username") String username,
            @RequestParam(name="password" ,required = false , defaultValue = "admin") String password,
            @RequestParam(name="id")Integer id){
        System.out.println("login");
        System.out.println("username = " + username);
        System.out.println("password = " + password);
        System.out.println("id = " + id);
        return "login";
    }


    // 接收普通表单 key=value&key=value&key=value
    @RequestMapping(value = "/update",method = RequestMethod.POST)
    public String update(User user){
        System.out.println(user);
        return "";
    }
    // @RequestBody 告诉SpringMVC，将客户端提交的JSON数据，映射为Java对象
    // SpringMVC的底层进行json转换的时候，默认使用的jackson依赖包
    @PostMapping(value = "/json")
    public String json(@RequestBody User user){
        System.out.println(user);
        return "json";
    }
    // 在SpringMVC中，需要使用Servlet中的相关对象，直接在方法上定义即可
    @GetMapping("/web")
    public String webDemo(HttpServletRequest req, HttpServletResponse resp , HttpSession session){
        String name = req.getParameter("name");
        System.out.println("name = " + name );
        return "webDemo";
    }
}
